import type { IdType, IPage } from '@/types/table';
import type {
  IAddStudent,
  IStudent,
  IStudentData,
  IStudentOne,
  IUser,
  IUserInfo,
  IStudentParams,
  IAdminData,
  IAdmin,
  IAdminOne,
  IRole,
  IPermissionArray,
  IAddPermission,
} from '@/types/user';
import { request } from '@/utils/request';

/**
 * 管理员登录API
 * @param data 账号密码
 * @returns
 */
export const getLogin = (data: IUser) => request<IUserInfo>('/admin/login', 'post', data);

/**
 * 获取学生列表
 * @param data 分页需要的当前页，每页几条数据
 * @returns
 */
export const getUserList = (data: IPage) => request<IStudentData>('/student', 'get', data);

/**
 * 添加一个学生
 * @param data
 * @returns
 */
export const addStudent = (data: IAddStudent) => request<string>('/student', 'post', data);

/**
 * 根据id获取学生信息（用于数据回显）
 * @param id 学生表id字段
 * @returns
 */
export const findByIdStudent = (id: number) => request<IStudentOne>('/student/' + id, 'get');

/**
 * 更新学生信息
 * @param data
 * @returns
 */
export const updatedStudent = (data: IStudent) =>
  request<string>('/student/' + data.id, 'patch', data);

/**
 * 管理员账号密码重置
 * @param data
 * @returns
 */
export const updatedStudentPassword = (data: IStudent) =>
  request<IdType>('/student/password/' + data.id, 'patch', data);

/**
 * 根据学生名字模糊搜索学生信息
 * @param data
 * @returns
 */
export const searchStudent = (data: IStudentParams) =>
  request<IStudentData>('/student/name', 'get', data);

/**
 * 获取管理员列表
 * @param data
 * @returns
 */
export const getAdminList = (data: IPage) => request<IAdminData>('/admin', 'get', data);

/**
 * 添加管理员
 * @param data
 * @returns
 */
export const addAdmin = (data: IAdmin) => request<IAdmin>('/admin', 'post', data);

/**
 * 删除管理员
 * @param id
 * @returns
 */
export const delAdmin = (id: number) => request<IdType>('/admin/' + id, 'delete');

/**
 * 根据id获取管理员信息（用于数据回显）
 * @param id 管理员表id字段
 * @returns
 */
export const findByIdAdmin = (id: number) => request<IAdminOne>('/admin/' + id, 'get');

/**
 * 更新管理员信息
 * @param data
 * @returns
 */
export const updatedAdmin = (data: IAdmin) => request<IdType>('/admin/' + data.id, 'patch', data);

/**
 * 管理员账号密码重置
 * @param data
 * @returns
 */
export const updatedAdminPassword = (data: IAdmin) =>
  request<IdType>('/admin/password/' + data.id, 'patch', data);

/**
 * 根据管理员名字模糊搜索管理员信息
 * @param data  IStudentParams里面有account字段所以服用
 * @returns
 */
export const searchAdmin = (data: IStudentParams) =>
  request<IAdminData>('/admin/name', 'get', data);

/**
 * 获取角色列表
 * @returns
 */
export const getRoleList = () => request<IRole[]>('/admin/role', 'get');

/**
 * 获取权限列表
 * @returns
 */
export const getPermissionList = () => request<IPermissionArray>('/admin/permission', 'get');

/**
 * 添加权限点
 * @returns
 */
export const addPermission = (data: IAddPermission) =>
  request<string>('/admin/add/permission', 'post', data);
